#include "stdio.h"
#include "string.h"

int tu[310][310],baktu[310][310];
int n=1,max,num=0;

void main()
{
	int i,j,k,l,t,p,q;
	char ins[310];
	
	scanf("%d",&n);
	while (n)
	{
		num++;
		memset(tu,0,sizeof(tu));
		memset(baktu,0,sizeof(baktu));
		max=0;
		gets(ins);
		for (i=1;i<=n;i++)
		{
			gets(ins);			
			k=2*n-1; 
			for (j=0;j<k;j++)
				switch (ins[j])
			{
				case ' ':tu[i][j+1]=0;break;
				case '#':tu[i][j+1]=0;break;
				case '-':tu[i][j+1]=max=1;break;
			}
		}
		
		for (j=1;j<=k;j++)
			for (i=1;i<=n;i++)
				baktu[i][j]=tu[n-i+1][j];

		if (n==1)
		{
				printf("Triangle #%d\n",num);
				printf("The largest triangle area is %d.\n\n",max);		
				scanf("%d",&n);
				continue;
		}
		
		for (i=1;i<=n;i++)
		{
			for (j=(i+1)%2+1;j<=k;j+=2)
				if (tu[i][j]&&tu[i][j+1]&&tu[i][j+2]&&tu[i+1][j+1])
					tu[i][j]=max=2;
		}
				
/*		for (i=1;i<=n;i++)
		{
			for (j=1;j<=k;j++)
				printf("%d",tu[i][j]);
			printf("\n");
		}
		printf("\n");
*/		
		for (l=3;l<=n;l++)
		{
			t=n-l+1;
			q=2*t-1;
			p=l-1;
			for (i=1;i<=t;i++)
				for (j=(i+1)%2+1;j<=q;j+=2)
					if (tu[i][j]==p&&tu[i][j+2]==p&&tu[i+1][j+1]==p)
						tu[i][j]=max=l;					
		}
	

/* 接下来处理上下旋转的情况 */
		for (i=1;i<=n;i++)
		{
			for (j=((n%2+i+1)%2+1);j<=k;j+=2)
				if (baktu[i][j]&&baktu[i][j+1]&&baktu[i][j+2]&&baktu[i+1][j+1])
				{
					baktu[i][j]=2;
					if (max<2) max=2;
				}		
		}

		for (l=3;l<=n;l++)
		{
			t=n-l+1;
			q=2*n-1;
			p=l-1;
			for (i=1;i<=t;i++)
				for (j=((n%2+i+1)%2+1);j<=q;j+=2)
					if (baktu[i][j]==p&&baktu[i][j+2]==p&&baktu[i+1][j+1]==p)
					{
						baktu[i][j]=l;
						if (max<l) max=l;
					}		
		}

		i=2*max-1;
		j=0;
		while (i>0)
		{
			j+=i;
			i-=2;
		}
		printf("Triangle #%d\n",num);		
		printf("The largest triangle area is %d.\n\n",j);		
		
		scanf("%d",&n);
	
	}
	
}

/*
 problem name: Triangles 

 problem type: 图论(可能也算不上吧，因为没有用上什么图论的算法)
 
 problem description:
	给你一个很大的三角形，上面有很多小的三角形洞，问你能够用它剪出的最大的三角形有多大。
	输出时用它能包含多少个最小形状的三角形来描述它的大小。
	note:
	1:正立的和倒立的三角形都算。(Note that the largest triangle can have its point at the top)
	2:每组数据回车 Output a blank line after each test case. 
	3:最大的三角形高度：integer n (1 <= n <= 100) 
 
 a little speacial:
	开始是读一个整数n，然后是读n行字符串，C语言在处理的时候有一个小问题，就是它会在读完
	整数之后，接着读字符串时，把整数后面那个回车读进去。我的处理方法是先预读一次。
	引用：
	gets(ins);  //这儿就是预读
	for (i=1;i<=n;i++)
	{
	gets(ins);	
	……

  my arithmetic:
	从边长为二的三角形开始找起，因为相邻的三个边长为二的三角形又可以组成一个边长为三的三角形。
	所以每一边长的三角形只需要扫描一次就行。考虑到还有倒的三角形，所以把输入的数据上下翻一次
	再扫描。算法的时间复杂度为 2*n*n;

  my fault:
	1:因为读的时候正小三角形和倒小三角形都没加区分的读，所以在程序后面判断它们只有靠它的坐标的
		奇偶性特点。我第一次做的时候忘了考虑。
		相关代码：
		for (j=(i+1)%2+1;j<=k;j+=2)

	2:本来以为上下翻转就只需要把同样的代码copy一次就OK的，结果后来发现根本不行。翻了之后三角形
	的类型和对应的坐标同正向的不同了，所以不能用上面提到的坐标的奇偶性来简单的判断了，还得加上
	三角形的高度来综合一起判断。
	相关代码：
		(j=((n%2+i+1)%2+1);j<=k;j+=2)

  submit times : about 10 times
  use time : 3.5 hours
  run time :00:00.14 s

 */